babl: detect sRGB profiles from matrix
authorØyvind Kolås <pippin@gimp.org>
Sat, 2 Sep 2017 23:00:49 +0000 (01:00 +0200)
committerØyvind Kolås <pippin@gimp.org>
Sat, 2 Sep 2017 23:00:53 +0000 (01:00 +0200)
When TRCs also are matching, return internal sRGB instead of creating a
duplicate.

babl/babl-icc.c

index 07ec1e74ceb6f35d523340fe5ef072d1ac46993d..a79f21b1d2788eb71ebd3ba23433f538161ef22b 100644 (file)
@@ -756,7 +756,22 @@ babl_space_from_icc (const char *icc_data,
      wY = icc_read (s15f16, offset + 8 + 4);
      wZ = icc_read (s15f16, offset + 8 + 4 * 2);
 
-     babl_free (state);
+     if (trc_red == babl_trc ("sRGB") &&
+         trc_green == babl_trc ("sRGB") &&
+         trc_blue == babl_trc ("sRGB") &&
+         fabs(rx - 0.436042) < 0.001 &&
+         fabs(ry - 0.222492) < 0.001 &&
+         fabs(rz - 0.013916) < 0.001 &&
+         fabs(gx - 0.385122) < 0.001 &&
+         fabs(gy - 0.716915) < 0.001 &&
+         fabs(gz - 0.097063) < 0.001 &&
+         fabs(bx - 0.143053) < 0.001 &&
+         fabs(by - 0.060609) < 0.001 &&
+         fabs(bz - 0.713939) < 0.001)
+     {
+        babl_free (state);
+        return babl_space ("sRGB");
+     }
 
      {
        Babl *ret = (void*)babl_space_from_rgbxyz_matrix (NULL,
@@ -767,6 +782,8 @@ babl_space_from_icc (const char *icc_data,
                 trc_red, trc_green, trc_blue);
        ret->space.description = descr;
        ret->space.copyright = copyright;
+
+       babl_free (state);
        return ret;
      }
   }